package 力扣.中等;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

/*
* 给定数组 A，我们可以对其进行煎饼翻转：我们选择一些正整数 k <= A.length，然后反转 A 的前 k 个元素的顺序。我们要执行零次或多次煎饼翻转（按顺序一次接一次地进行）以完成对数组 A 的排序。

返回能使 A 排序的煎饼翻转操作所对应的 k 值序列。任何将数组排序且翻转次数在 10 * A.length 范围内的有效答案都将被判断为正确。

 

示例 1：

输入：[3,2,4,1]
输出：[4,2,4,3]
解释：
我们执行 4 次煎饼翻转，k 值分别为 4，2，4，和 3。
初始状态 A = [3, 2, 4, 1]
第一次翻转后 (k=4): A = [1, 4, 2, 3]
第二次翻转后 (k=2): A = [4, 1, 2, 3]
第三次翻转后 (k=4): A = [3, 2, 1, 4]
第四次翻转后 (k=3): A = [1, 2, 3, 4]，此时已完成排序。
示例 2：

输入：[1,2,3]
输出：[]
解释：
输入已经排序，因此不需要翻转任何内容。
请注意，其他可能的答案，如[3，3]，也将被接受。

*
* 自己的思路：找规律 先把大的放最后 接着删掉 最后在前面的顺序放后面 在后面的倒序放前面
* 优化：把顶点前的数 和定点后的数交换
* public void reverseArray(int[]A,int n){
        for(int i=0,j=n-1;i<j;i++,j--){
            int temp=A[i];
            A[i]=A[j];
            A[j]=temp;
        }
    }


*/
public class 煎饼排序 {
    public static void main(String[] args) {
        Integer[] a={3,2,4,1};
        ArrayList<Integer> arr=new ArrayList(Arrays.asList(a));
//        for(int i=0;i<a.length;i++){
//            arr.add(i,a[i]);
//        }


        ArrayList<Integer> list=new ArrayList<>();
        while(arr.size()>0){

            int max=0;
            int index=0;
            for(int i=0;i<arr.size();i++){
                if(arr.get(i)>max){
                    max=arr.get(i);
                    index=i;
                }
            }
            if(max==arr.get(arr.size()-1)){
                arr.remove(index);
            }else {
                if(index==0){
                    list.add(arr.size());
                    arr.remove(index);
                    Collections.reverse(arr);
                }else {
                    list.add(index+1);
                    list.add(arr.size());
                    arr.remove(index);
                    ArrayList<Integer> c=new ArrayList<>();
                    for(int i=0;i<arr.size()-index;i++){
                        c.add(arr.get(arr.size()-i-1));
                    }
                    for(int i=0;i<index;i++){
                        c.add(arr.get(i));
                    }
                    arr=(ArrayList<Integer>) c.clone();

                }

            }

        }


        int[] xp=new int[list.size()];
        for(int i=0;i<list.size();i++){
            xp[i]=list.get(i);
        }


        System.out.println(Arrays.toString(xp));
    }
}
